//
// Created by Administrator on 2025/4/12.
//

#ifndef STATEMACHINE_BASESTATE_H
#define STATEMACHINE_BASESTATE_H

#include <iostream>
#include "Event.h"


//先声明有这个类，因为这里要用到，等会再实现它
class StateMachine;
//基类状态
class BaseState{
public:
    virtual ~BaseState(){};//虚析构，通过父类指针释放子类空间
    //进入状态时调用
    virtual void onEntry(){};//虚函数，不设置为纯虚函数，代表这个函数可以不重写,不重写则调用基类虚函数
    //离开状态时调用
    virtual void onExit(){};//虚函数，不设置为纯虚函数，代表这个函数可以不重写,不重写则调用基类虚函数
    //处理事件
    virtual bool handleEvent(StateMachine* machine,const Event* event) = 0;//纯虚函数，强制子类必须要重写这个方法
    //获取ID，可以根据ID区分不同状态
    virtual int getID() const = 0;//纯虚函数，强制子类必须要重写这个方法
    //获取状态名称，主要用于调试
    virtual std::string getStateName() const = 0;//纯虚函数，强制子类必须要重写这个方法
private:
};

#endif //STATEMACHINE_BASESTATE_H
